﻿#define _CRT_SECURE_NO_WARNINGS 1

#include <iostream>
#include <vector>
#include <set>
#include <algorithm>

using namespace std;

//给你一个整数数组 nums ，其中总是存在 唯一的 一个最大整数 。
//
//请你找出数组中的最大元素并检查它是否 至少是数组中每个其他数字的两倍 。如果是，则返回 最大元素的下标 ，否则返回 - 1 。
class Solution
{
public:
    int dominantIndex(vector<int>& nums)
    {
        int n = nums.size();
        int tmp[50] = { 0 };
        for (int i = 0; i < n; i++)
        {
            tmp[i] = nums[i];
        }

        sort(tmp, tmp + n);
        if (tmp[n - 1] < tmp[n - 2] * 2)
            return -1;
        for (int i = 0; i < n; i++)
        {
            if (nums[i] == tmp[n - 1])
                return i;
        }
        return -1;

    }
};

//给定两个数组 nums1 和 nums2 ，返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。
class Solution
{
public:
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2)
    {
        sort(nums1.begin(), nums1.end());
        sort(nums2.begin(), nums2.end());

        set<int> st;
        vector<int> ret;
        int n1 = nums1.size();
        int n2 = nums2.size();
        int cur1 = 0, cur2 = 0;
        while (cur1 < n1 && cur2 < n2)
        {
            if (nums1[cur1] < nums2[cur2])
                cur1++;
            else if (nums1[cur1] == nums2[cur2])
            {
                st.insert(nums1[cur1]);
                cur1++;
                cur2++;
            }
            else cur2++;
        }

        for (auto e : st)
            ret.push_back(e);

        return ret;
    }
};


//给定一个大小为 n 的数组 nums ，返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n / 2 ⌋ 的元素。
//
//你可以假设数组是非空的，并且给定的数组总是存在多数元素。
class Solution
{
public:
    int majorityElement(vector<int>& nums)
    {
        // 默认第一个为最多的字符
        int count = 1, tmp = nums[0];
        for (int i = 1; i < nums.size(); i++)
        {
            //与保存的字符相同则计数+1
            if (nums[i] == tmp)
                count++;
            //与保存的字符不同则计数-1
            else count--;
            //计数为0表示有可能保存的字符不是最多的字符，换下一个
            if (count == 0) tmp = nums[i + 1];
        }

        return tmp;
    }
};


//自除数的判断
class Solution
{
public:
    vector<int> selfDividingNumbers(int left, int right)
    {
        vector<int> ret;
        for (int i = left; i <= right; i++)
        {
            int tmp = i;
            while (tmp)
            {
                int remainder = tmp % 10;
                //判断i自身与余数取模是否为0
                if (remainder == 0 || i % remainder != 0)
                    break;
                tmp /= 10;
            }
            if (tmp == 0)
                ret.push_back(i);
        }

        return ret;
    }
};

//给你一个含 n 个整数的数组 nums ，
//其中 nums[i] 在区间[1, n] 内。请你找出所有在[1, n] 范围内但没有出现在 nums 中的数字，并以数组的形式返回结果。
class Solution
{
public:
    vector<int> findDisappearedNumbers(vector<int>& nums)
    {
        int n = nums.size();
        std::vector<int> result;
        vector<int> tmp(n, 1);
        for (int i = 0; i < n; i++)
        {
            tmp[nums[i] - 1]--;
        }

        for (int i = 0; i < n; i++)
        {
            if (tmp[i] == 1)
            {
                result.push_back(i + 1);
            }
        }

        return result;
    }
};

//给定一个二进制数组 nums ， 计算其中最大连续 1 的个数。
class Solution
{
public:
    int findMaxConsecutiveOnes(vector<int>& nums)
    {
        int n = nums.size();
        int count = 0, maxcount = 0;
        for (int i = 0; i < n; i++)
        {
            if (nums[i] == 1)
                count++;
            else
            {
                maxcount = max(maxcount, count);
                count = 0;
            }
        }

        return max(maxcount, count);

    }
};

//完全数（Perfect number），又称完美数或完备数，是一些特殊的自然数。
//
//它所有的真因子（即除了自身以外的约数）的和（即因子函数），恰好等于它本身。
//
//例如：28，它有约数1、2、4、7、14、28，除去它本身28外，其余5个数相加，1 + 2 + 4 + 7 + 14 = 28。
#include <iostream>
using namespace std;

int main()
{
    int n = 0;
    cin >> n;
    int count = 0;
    for (int i = 1; i <= n; i++)
    {
        int sum = 0;
        for (int j = 1; j < i; j++)
        {
            if (i % j == 0)
                sum += j;
        }
        if (sum == i)
            count++;
    }
    cout << count << endl;

}

int main()
{

	return 0;
}